﻿Option Strict On

Imports System.Collections.Generic
Imports System.Text
Imports System.Net.Sockets

Namespace Proxy
    ''' <summary>
    ''' Proxy client interface.  This is the interface that all proxy clients must implement.
    ''' </summary>
    Public Interface IProxyClient

        ''' <summary>
        ''' Event handler for CreateConnectionAsync method completed.
        ''' </summary>
        Event CreateConnectionAsyncCompleted As EventHandler(Of CreateConnectionAsyncCompletedEventArgs)

        ''' <summary>
        ''' Gets or sets proxy host name or IP address.
        ''' </summary>
        Property ProxyHost() As String

        ''' <summary>
        ''' Gets or sets proxy port number.
        ''' </summary>
        Property ProxyPort() As Integer

        ''' <summary>
        ''' Gets String representing the name of the proxy.
        ''' </summary>
        ReadOnly Property ProxyName() As String

        ''' <summary>
        ''' Gets or set the TcpClient object if one was specified in the constructor.
        ''' </summary>
        Property TcpClient() As TcpClient

        ''' <summary>
        ''' Creates a remote TCP connection through a proxy server to the destination host on the destination port.
        ''' </summary>
        ''' <param name="destinationHost">Destination host name or IP address.</param>
        ''' <param name="destinationPort">Port number to connect to on the destination host.</param>
        ''' <return>
        ''' return an open TcpClient object that can be used normally to communicate
        ''' with the destination server
        ''' </return>
        ''' <remarks>
        ''' This method creates a connection to the proxy server and instructs the proxy server
        ''' to make a pass through connection to the specified destination host on the specified
        ''' port.  
        ''' </remarks>
        Function CreateConnection(ByVal destinationHost As String, ByVal destinationPort As Integer) As TcpClient

        ''' <summary>
        ''' Asynchronously creates a remote TCP connection through a proxy server to the destination host on the destination port.
        ''' </summary>
        ''' <param name="destinationHost">Destination host name or IP address.</param>
        ''' <param name="destinationPort">Port number to connect to on the destination host.</param>
        ''' <remarks>
        ''' This method creates a connection to the proxy server and instructs the proxy server
        ''' to make a pass through connection to the specified destination host on the specified
        ''' port.  
        ''' </remarks>
        Sub CreateConnectionAsync(ByVal destinationHost As String, ByVal destinationPort As Integer)

    End Interface
End Namespace